package com.itheima.dubbo.service;

import com.itheima.dubbo.User;
import com.itheima.dubbo.UserInterface;
import org.apache.dubbo.config.annotation.DubboService;
import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.rpc.RpcContext;
import org.springframework.beans.factory.annotation.Value;

/**
 * 超时时间级别:   消费方(方法级别)>消费方(接口级别)>提供方(方法级别)>提供方(接口级别)> 通用配置
 */
//@DubboService(weight = 200) // 设置权重
@DubboService // 表示服务提供方注解
//@DubboService(timeout = 1000)      // 提供方 接口 超时时间注解
//@DubboService(methods = {@Method(name = "getById",timeout = 1800)})   // 提供方 方法级别 超时时间注解
//@DubboService(retries = 0)  // 重试次数   0:不重试
//@DubboService(version = "${dubbo.application.version}") //多版本灰度发布
public class UserService implements UserInterface {
    @Override
    public String hello(String username) {
        return "Hello  Dubbo  " + username;
    }

    /**
     * 根据条件查询对象
     *
     * @param user
     * @return
     */
    @Value("${server.port}")
    private Integer port;

    @Override
    public User getById(User user) {
        User userResult = new User(user.getId(), "清华大学", 22);
        System.out.println("run userService...." + port);
        // 隐世传参还是通过上下文对象进行传递的。 获取隐式参数
        String name = RpcContext.getContext().getAttachment("name");
        System.out.println(name);
        // 业务  执行时间很长
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return userResult;
    }

}
